package Day017_缓冲流_转换流_序列化流_打印流.demo6_装饰设计模式;

/**
 * @author zhangyan
 * @date 2020/5/9 15:14
 */
/*
    装饰模式指的是在不改变原类, 不使用继承的基础上，动态地扩展一个对象的功能

    例如: BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream是对Filexxx的增强
 */

public class Test {
    public static void main(String[] args) {

        //创建对象
        LiuDeHua ldh = new LiuDeHua();
        //调用方法
        ldh.sing();
        ldh.dance();

        //需求:在不改变原类的基础上对LiuDeHua类的dance()方法进行扩展

       /*
        实现步骤:
        1. 装饰类和被装饰类必须实现相同接口
        2. 装饰类中必须传入被装饰类的引用
        3. 在装饰类中对需要扩展的方法进行扩展
        4. 在装饰类中对不需要扩展的方法调用被装饰类中的同名方法
        */

        //创建对象
        LiuDeHuaWrapper ldhw = new LiuDeHuaWrapper(ldh);
        //调用方法
        ldhw.dance();
    }
}
